package com.ssm.util;

import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


/**
 * 发送邮箱工具类
 * @author myx
 */
public class SendEmail {
	public static String myEmailAccount;
	public static String myEmailPassword;

	//发件人的SMTP服务器地址，必须准确，不同邮件的服务器地址不同，一般格式为：stmp.xxx.com
	public static String myEmailSMTPHost;
	//收件人邮箱
	public static String receiveMailAccount;
	/**
	 * 发送邮件方法
	 * @param receiveAccount 收件人地址
	 * @return Integer vCode 返回验证码，供提交form表单时向数据库更新验证码
	 * @throws Exception
	 */
	public static Integer sendEamil(String receiveAccount)throws Exception{
		myEmailAccount = "muyaxuan0530@163.com";
		myEmailPassword = "myx1994530";
		myEmailSMTPHost = "smtp.163.com";
		receiveMailAccount = receiveAccount;
		
		//获取随机验证码
		int vCode = VerifyCode.getVerifyCode();
		
		//创建参数配置，用于连接邮件服务器的参数配置
		Properties props = new Properties();
		//使用的协议（JavaMail规范要求）
		props.setProperty("mail.transport.protocol", "smtp");
		//发件人的邮箱的SMTP服务器地址
		props.setProperty("mail.smtp.host", myEmailSMTPHost);
		//需要请求认证
		props.setProperty("mail.smtp.auth", "true");
		//2.根据配置创建会话对象，用于和邮件服务器交互
		Session session = Session.getDefaultInstance(props);
		//设置debug模式，可以查看详细的发送log
		session.setDebug(true);
		//3.创建一封邮件
		MimeMessage message = createMimeMessage(session,myEmailAccount,receiveMailAccount,vCode);
		//4.根据Session获取邮件传输对象
		Transport transport = session.getTransport();
		//5.使用  邮箱账号  和  密码  连接邮件服务器，这里认证的邮箱必须于message中的发件人邮箱一致，否则报错
		transport.connect(myEmailAccount, myEmailPassword);
		//6.发送邮件，发到所有的收件地址，message.getAllRecipients()获取到的是在创建邮件对象时添加的所有收件人，抄送人，密送人
		transport.sendMessage(message, message.getAllRecipients());
		//7.关闭连接
		transport.close();
		return vCode;
	}
	
	
	
	/**
	 * 创建一封只包含文本的简单邮件
	 * 
	 * @param session	和服务器交互的会话
	 * @param myEmailAccount2	发件人的邮箱
	 * @param receiveMailAccount2	收件人的邮箱
	 * @return
	 */
	private static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail, Integer vCode)throws Exception {
		//1.创建一封邮件
		MimeMessage message = new MimeMessage(session);
		//2.Form:发件人（昵称有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改昵称）
		message.setFrom(new InternetAddress(sendMail, "重置密码", "UTF-8"));
		//3.To:收件人（可以增加多个收件人、抄送、密送）
		message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveMail, "", "UTF-8"));
		//4.Subject:邮件主题（标题有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改标题）
		message.setSubject("找回密码验证","UTF-8");
		//5.Content:邮件正文（可以使用html标签）（内容有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改发送内容）
		message.setContent("您的验证码为"+vCode,"text/html;charset=UTF-8");
		//6.设置发件时间
		message.setSentDate(new Date());
		//7.保存设置
		message.saveChanges();
		return message;
	}
}	
